<?php

namespace app\common\job;

use app\common\model\Config;
use app\common\model\Custom;
use app\common\model\shop\Order as ModelShopOrder;
use app\common\model\User;
use app\common\model\user\Alloca;
use app\common\model\user\Custom as UserCustom;
use think\Exception;
use think\Log;
use think\queue\Job;
use Throwable;

class Cancelalloca
{
    public function cancelalloca(Job $job, $id)
    {
        try {
            //TODO
            Log::error('开始发送消息1：' . $id);
            // $setday = Config::where('name', 'del_custom_day')->value('value');
            // $order = ModelShopOrder::where(['custom_id' => $id, 'status' => ['>=', '0']])->where('createtime', '>', time() - $setday * 86400)->order('pay_time desc')->find();
            $alloca = Alloca::get($id);
            if (!$alloca) {
                $flag = $job->delete();
            }
            if ($alloca->is_claim == 0) {
                $flag = $alloca->delete();
            } else {
                $flag = $job->delete();
            }
            //1、给用户发送消息

            if (isset($flag) && $flag) {
                //2、发送完成后 删除job
                $job->delete();
            } else {
                //任务轮询4次后删除
                if ($job->attempts() > 3) {
                    // 第1种处理方式：重新发布任务,该任务延迟10秒后再执行
                    //$job->release(10);
                    // 第2种处理方式：原任务的基础上1分钟执行一次并增加尝试次数
                    $job->failed();
                    // 第3种处理方式：删除任务
                    $job->delete();
                }
            }
        } catch (Throwable | Exception $e) {
            // 队列执行失败
            Log::error('发送消息队列执行失败2：' . $e->getMessage() . '---' . json_encode($id));
        }
    }

    public function custompool(Job $job, $id)
    {
        try {
            //TODO
            Log::error('开始发送消息2：' . $id);
            // $setday = Config::where('name', 'del_custom_day')->value('value');
            // $order = ModelShopOrder::where(['custom_id' => $id, 'status' => ['>=', '0']])->where('createtime', '>', time() - $setday * 86400)->order('pay_time desc')->find();

            $alloca = UserCustom::get($id);
            if (!$alloca) {
                $flag = $job->delete();
            }
            if ($alloca->is_apply == 0) {
                $alloca->delete();
                Custom::where('id', $alloca->custom_id)->update(['is_send' => 0]);
                $flag =  $job->delete();
            } else {
                $flag =  $job->delete();
            }
            //1、给用户发送消息

            if (isset($flag) && $flag) {
                //2、发送完成后 删除job
                $job->delete();
            } else {
                //任务轮询4次后删除
                if ($job->attempts() > 3) {
                    // 第1种处理方式：重新发布任务,该任务延迟10秒后再执行
                    //$job->release(10);
                    // 第2种处理方式：原任务的基础上1分钟执行一次并增加尝试次数
                    $job->failed();
                    // 第3种处理方式：删除任务
                    $job->delete();
                }
            }
        } catch (Throwable|Exception $e) {
            // 队列执行失败
            Log::error('发送消息队列执行失败1：' . $e->getMessage() . '---' . json_encode($id));
        }
    }

    // 消息队列执行失败后会自动执行该方法
    public function failed($data)
    {
        Log::error('消息队列达到最大重复执行次数后失败：' . json_encode($data));
    }
}
